Imperative vs Declarative
"Imperative languages are characterized as having an implicit state that is modified (i.e., side effected) by constructs (i.e., commands) in the source language." [[@Huda89213]] Therefore they have a notion of sequencing of commands.
"In contrast, declarative languages are characterized as having no implicit state, and thus the emphasis is placed entirely on programming with expressions (or terms). In particular, functional languages are declarative languages whose underlying model of computation is the function (in contrast to, for example, the relation that forms the basis for logic programming languages)". [[@Huda89213]]
"In a declarative language state-oriented computations are accomplished by carrying the state around explicitly rather than implicitly, and looping is accomplished via recursion rather than by sequencing." [[@Huda89213]]
We loose referential transparency when we introduce side-effects. This hurts equational reasoning [[@Huda89213]].
Referential Transparency and Equational Reasoning
"Church’s work was motivated by the desire to create a calculus (informally, a syntax for terms and set of rewrite rules for transforming terms) that captured one’s intuition about the behavior of functions." [[@Huda89213]]